From: Jyrki Gadinger Date: Thu, 20 Feb 2025 13:03:11 +0000 (+0100) Subject: FolderStatusModel: only create a single QFileIconProvider object X-Git-Tag: archive/raspbian/3.16.7-1_deb13u1+rpi1~1^2~12^2~2^2~41^2 X-Git-Url: https://dgit.raspbian.org/%22http:/www.example.com/cgi/%22https:/www.github.com/%22bookmarks:///%22http:/www.example.com/cgi/%22https:/www.github.com/%22bookmarks:/?a=commitdiff_plain;h=85e460c77517e8d0c31c2a8bfe7e1717d11482f1;p=nextcloud-desktop.git FolderStatusModel: only create a single QFileIconProvider object otherwise the icons will end up being loaded from the system each time, which on Windows takes quite long (I saw many calls to `shell32.dll!SHDefExtractIcon` during profiling) Signed-off-by: Jyrki Gadinger --- diff --git a/src/gui/folderstatusmodel.cpp b/src/gui/folderstatusmodel.cpp index d67e6e747..d1211d741 100644 --- a/src/gui/folderstatusmodel.cpp +++ b/src/gui/folderstatusmodel.cpp @@ -21,7 +21,6 @@ #include #include -#include #include #include @@ -194,7 +193,7 @@ QVariant FolderStatusModel::data(const QModelIndex &index, int role) const } else if (subfolderInfo._size > 0 && isAnyAncestorEncrypted(index)) { return QIcon(QLatin1String(":/client/theme/lock-broken.svg")); } - return QFileIconProvider().icon(subfolderInfo._isExternal ? QFileIconProvider::Network : QFileIconProvider::Folder); + return _fileIconProvider.icon(subfolderInfo._isExternal ? QFileIconProvider::Network : QFileIconProvider::Folder); } case Qt::ForegroundRole: if (subfolderInfo._isUndecided || (subfolderInfo._isNonDecryptable && subfolderInfo._checked)) { diff --git a/src/gui/folderstatusmodel.h b/src/gui/folderstatusmodel.h index 96b7467d1..7a776a64b 100644 --- a/src/gui/folderstatusmodel.h +++ b/src/gui/folderstatusmodel.h @@ -21,6 +21,7 @@ #include #include #include +#include class QNetworkReply; namespace OCC { @@ -161,6 +162,8 @@ private: */ QMap _fetchingItems; + QFileIconProvider _fileIconProvider; + signals: void dirtyChanged();